草庐IT

C++ 指向 vector 的指针

全部标签

c++ - 可以将原始指针传递给需要迭代器的模板函数吗?

能否将原始指针传递给需要迭代器的模板函数?我是否认为迭代器只是一个覆盖指针相关运算符(例如*、++等)的类,或者迭代器是否公开了指针不公开的任何其他接口(interface)?换句话说,指针“看起来像”迭代器吗?例子:我想使用boost::algorithm::knuth_morris_pratt_search(documentationhere)。我的语料库(要搜索的字符串)和模式(要查找的字符串)只是内存中的字节-我有一个包含起始地址和字节长度的指针。为了论证,假设它是一个C风格的字符串。根据文档,knuth_morris_pratt_search函数要求我为语料库和模式传入开始和

c++ - 如果我想要最大速度,我应该只在 std::vector 上使用数组吗?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter为指导。8年前关闭。我正在编写一些需要尽可能快的代码,而不会占用我所有的研究时间(换句话说,没有手动优化的程序集)。我的系统主要由一堆3D点(原子系统)组成,因此我编写的代码进行了大量距离比较、最近邻搜索以及其他类型的排序和比较。这些是大型的、百万或十亿点系统,并且简单的O(n^2)嵌套for循环不会削减它。对我来说最简单的方法是使用std::vector保持点坐标。起初我认为

c++ - 将 vector 更改为数组会使我的程序变慢

我分析了我的一个程序,发现热点是levenshtein_distance,递归调用。我决定尝试优化它。lvh_distancelevenshtein_distance(conststd::string&s1,conststd::string&s2){constsize_tlen1=s1.size(),len2=s2.size();std::vectorcol(len2+1),prevCol(len2+1);constsize_tprevColSize=prevCol.size();for(unsignedinti=0;i(s1i!=s2[j])));}col.swap(prevCol)

c++ - 删除向上转换为基指针的对象数组

开始将一些库从msvc移动到mingw,并发现当有人想要删除一个arrayupcastedobjects时msvc的非常有趣的行为。即msvc做了一些黑魔法(它似乎喜欢这样做)并且波纹管代码执行得很好,但是在mingw中(4.7.2(崩溃。我相信mingw正在正确执行并且它的msvc巫术就是制作睡虫。代码:#includeclassfoo{staticintidgen;protected:intid;public:foo(){id=idgen++;std::coutmsvc2010的输出Hello(foo-0)Hello(bar-0)Hello(foo-1)Hello(bar-1)By

c++ - 虚函数和 vector 迭代器

我在处理这段特定代码时遇到了问题:似乎虚函数没有像我预期的那样工作。#include#include#includeclassCPolygon{protected:std::stringname;public:CPolygon(){this->name="Polygon";}virtualvoidPrint(){printf("FromCPolygon:%s\n",this->name.c_str());}};classCRectangle:publicCPolygon{public:CRectangle(){this->name="Rectangle";}virtualvoidPri

c++将函数作为参数传递给另一个带有void指针的函数

我试图将一个函数作为参数传递给另一个带有空指针的函数,但它不起作用#includeusingnamespacestd;voidprint(){cout问题是void函数指针,我可以编写更简单的代码,例如#includeusingnamespacestd;voidprint();voidexecute(void());intmain(){execute(print);//sendsaddressofprintreturn0;}voidprint(){cout但我不知道我是否可以使用void指针它是为了实现这样的东西voidprint(){cout 最佳答案

c++ - 是否可以将整数指针转换为位于该内存位置的实际整数?

通常,我们在C++中这样声明变量:intexampleInteger;如果我有一个指向整数地址的指针怎么办?我可以声明一个位于特定内存地址的整数吗?int*exampleIntegerPtr=(int*)0x457FB;intexampleInteger=*exampleIntegerPtr;不幸的是,第二个示例中的exampleInteger与第一个示例中的exampleInteger不同。第二个示例创建一个新变量,该变量与位于exampleIntegerPtr的整数具有相同的值。是否有可能以某种方式获取位于exampleIntegerPtr的实际整数?

c++ - vector<bool> 可以由 int 初始化吗

我想枚举[0,31]的bool表示并将其存储在tries中供以后使用。staticconstintN=5;vectortries(N);for(inti=0;iinitializedbyint?//soIdon'thavetodobitoperationfor(intt=0;t 最佳答案 std::vector不能这样做,但是std::bitset能够。由于vector的大小在您的情况下是恒定的,因此您应该使用std::bitset.只需使用您想要的非负整数值对其进行初始化即可。请注意bitset不提供(或模仿)Container接

c++ - 无法在 C++ 中初始化指针数组

我有一个指向名为“表”的结构(该结构称为节点)的指针数组。我在类中这样声明数组:Node*table;然后,在另一种方法中,我初始化表:this->table=newNode[this->length];一切正常。this->length是一个有效条目,this->table指向正确的数组,等等。但是,然后我尝试更改元素的值:for(inti=0;ilength;i++){this->table[i]=newNode;}甚至for(inti=0;ilength;i++){this->table[i]=0;}一切都开始出现问题。为什么我不能将这些指针设置为任何内容?这是我得到的错误:(其

c++ - 指向类的指针会增加模块化吗?

我最近注意到,在编译大型项目(我一直在使用Audacity源代码)时,更改一个被许多其他文件引用的文件,比方说一个被几十个其他文件引用的工具栏小部件,导致编译需要很长时间。如果您需要调整或调试这样的文件,可能需要几分钟或更长时间才能完成每个编译周期。如果您要在引用工具栏的文件中使用指针,编译器是否仍需要重新编译包含对该类的引用的每个文件?如果没有,它是否仍会按设计编译这些文件?在任何现有的语言或框架中,是否可以有一个指向类原型(prototype)而不是实例的指针? 最佳答案 好吧,如果你改变了一个接口(interface),那么你